home *** CD-ROM | disk | FTP | other *** search
- property pointList, stageDistances, stageLengths, numPoints, totalLength
-
- on new me, i_img
- pointList = []
- stageDistances = []
- return me
- end
-
- on addPoint me, pointNumber, newloc, distance
- pointList[pointNumber] = newloc
- stageDistances[pointNumber] = distance
- end
-
- on calcStats me
- numPoints = pointList.count
- totalLength = 0
- i = 1
- repeat while i <= numPoints
- totalLength = totalLength + stageDistances[i]
- i = 1 + i
- end repeat
- stageLengths = []
- lengthSoFar = 0
- i = 1
- repeat while i <= numPoints
- lengthSoFar = lengthSoFar + stageDistances[i]
- stageLengths[i] = lengthSoFar
- i = 1 + i
- end repeat
- end
-
- on calcCourseDistance me, lap, nodenum, nodetime
- distance = (lap - 1) * totalLength
- nodenum = nodenum - 1
- if nodenum = 0 then
- nodenum = numPoints
- end if
- distance = distance + (nodetime * stageDistances[nodenum])
- nodenum = nodenum - 1
- if nodenum then
- distance = distance + stageLengths[nodenum]
- end if
- return distance
- end
-
- on getBasis me, p, t
- fresult = 0
- case p of
- (-2):
- fresult = (((-t + 2) * t) - 1) * t / 2
- (-1):
- fresult = ((((3 * t) - 5) * t * t) + 2) / 2
- 0:
- fresult = ((((-3 * t) + 4) * t) + 1) * t / 2
- 1:
- fresult = (t - 1) * t * t / 2
- end case
- return fresult
- end
-
- on getPoint me, i, t
- resultPoint = point(0, 0)
- j = -2
- repeat while j <= 1
- controlPointPos = i + j
- if controlPointPos < 1 then
- controlPointPos = controlPointPos + pointList.count
- end if
- if controlPointPos > pointList.count then
- controlPointPos = controlPointPos - pointList.count
- end if
- resultPoint = resultPoint + (pointList[controlPointPos] * me.getBasis(j, t))
- j = 1 + j
- end repeat
- return resultPoint
- end
-
- on getDxBasis me, p, t
- fresult = 0
- case p of
- (-2):
- fresult = ((((-3 * t) + 4) * t) - 1) / 2.0
- (-1):
- fresult = ((9 * t) - 10) * t / 2.0
- 0:
- fresult = ((((-9 * t) + 8) * t) + 1) / 2.0
- 1:
- fresult = ((3 * t) - 2) * t / 2.0
- end case
- return fresult
- end
-
- on getDxDyPoint me, i, t
- resultPoint = point(0, 0)
- j = -2
- repeat while j <= 1
- controlPointPos = i + j
- if controlPointPos < 1 then
- controlPointPos = controlPointPos + pointList.count
- end if
- if controlPointPos > pointList.count then
- controlPointPos = controlPointPos - pointList.count
- end if
- resultPoint = resultPoint + (pointList[controlPointPos] * me.getDxBasis(j, t))
- j = 1 + j
- end repeat
- return resultPoint
- end
-